#include <iostream>
#include <cstdio>
#include "ASTNode.h"
#include "SymbolTable.h"
#include "CodeGenerator.h"
#include "Optimizer.h"
#include "typecheck.h"

extern int yyparse();
extern FILE* yyin;
extern ASTNode* root;

int main(int argc, char **argv) {
    // 支持重定向输入输出，方便本地测试
    // 用法：./compiler < input_file.tc > output_file.s
    yyin = stdin;

    yyparse();

    if (root) {
        // 类型检查
        TypeChecker typeChecker;
        typeChecker.check(root);
        // 构建符号表
        SymbolTableBuilder symbolBuilder;
        symbolBuilder.build(root);
        // 应用优化器
        Optimizer optimizer;
        optimizer.optimize(root);
        // 生成RISC-V汇编代码
        CodeGenerator codeGen;
        codeGen.generate(root);
        // 只输出汇编代码到stdout
        codeGen.printCode();
        // delete root; // 不需要手动delete，ASTNode用unique_ptr管理
    }

    return 0;
} 